<template>
  <nav class="app-topnav">
    <div class="container">
      <ul>
        <template v-if="profile.token">
          <li>
            <router-link to="/member">
              <i class="iconfont icon-user"></i>{{ profile.account }}
            </router-link>
          </li>
          <li><a href="javascript:;" @click="logout">退出登录</a></li>
        </template>
        <template v-else>
          <li>
            <router-link :to="redirectUrl">请先登录</router-link>
          </li>
          <li><a href="javascript:;">免费注册</a></li>
        </template>
        <li>
          <router-link to="/member/order">我的订单</router-link>
        </li>
        <li><a href="javascript:;">会员中心</a></li>
        <li><a href="javascript:;">帮助中心</a></li>
        <li><a href="javascript:;">关于我们</a></li>
        <li><a href="javascript:;"><i class="iconfont icon-phone"></i>手机版</a></li>
      </ul>
    </div>
  </nav>
</template>

<script>
import { mapState, useStore } from 'vuex'
import { computed, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'

export default {
  name: 'AppNavbar',
  setup(prop, ctx) {
    const route = useRoute()

    // 当用户登录的时候, 跳转它上次阅览的网页链接
    const redirectUrl = ref(null)
    watch(() => route.fullPath, (newVal) => {
      const fullPath = encodeURIComponent(newVal)
      redirectUrl.value = `/login?redirectUrl=${fullPath}`
    }, { immediate: true })

    const router = useRouter()
    // 获取用户的登录信息才能控制切换导航菜单
    const store = useStore()
    // 注意模式下 state和getter不是响应式的,
    // const { profile } = store.state.user
    // 需要创建computed引用保留响应式

    // 自定义封装的 辅助辅助函数有问题!!!
    // const profile = computed(() => mapState(['user/profile']))
    const profile = computed(() => {
      return store.state.user.profile
    })

    // 退出登录
    const logout = () => {
      // 1.清空本地存储信息和vuex的用户信息
      store.commit('user/setUser', {})
      // 2.清空本地购物车信息
      store.commit('cart/setCart', [])
      // 3.跳转登录
      router.push('/login')
    }

    return {
      profile,
      logout,
      redirectUrl
    }
  }
}
</script>

<style lang="less" scoped>
.app-topnav {
  background: #333;

  ul {
    display: flex;
    height: 53px;
    justify-content: flex-end;
    align-items: center;

    li {
      a {
        padding: 0 15px;
        color: #cdcdcd;
        line-height: 1;
        display: inline-block;

        i {
          font-size: 14px;
          margin-right: 2px;
        }

        &:hover {
          color: @xtxColor;
        }
      }

      // ~ 选择器作用: 选择当前选择器后的所有元素
      //  等同于给所有 li a 都添加border-left样式, 然后在手动去除最后一个样式
      ~ li {
        a {
          border-left: 2px solid #666;
        }
      }
    }
  }
}
</style>
